package yogiro.service;

import java.sql.SQLException;
import java.util.ArrayList;

import yogiro.dao.MessageDAO;
import yogiro.to.MemberTO;
import yogiro.to.MessageTO;
import yogiro.to.PagingTO;
import yogiro.to.messageListTO;
import yogiro.util.Utilities;

public class MessageService {
	private MessageDAO messageDAO;
	public MessageService(MessageDAO messageDAO){
		this.messageDAO = messageDAO;
	}
	//메세지 삽입(admin)
	public MessageTO insertMessage(String title,String writer,String content,String messageReceiver) throws SQLException{
		int messageNo = messageDAO.sequence();
		String messageWritedate = Utilities.getNow();
		MessageTO mto = new MessageTO(messageNo, title, content, messageWritedate, writer, messageReceiver, 0, 0, 0);
		messageDAO.insertMessage(mto);
		return mto;
	}
	//메세지 삽입(client에게 답변하는 글)
	public MessageTO insertMessageClient(String title,String writer,String content, String messageReceiver) throws SQLException{
		String messageWritedate = Utilities.getNow();
		int messageNo = messageDAO.sequence();
		MessageTO mto = new MessageTO(messageNo, title, content, messageWritedate, writer, messageReceiver, 0, 0, 1);
		messageDAO.insertMessageClient(mto);
		mto.setMessageWritedate(Utilities.changeDayTimeFormat(mto.getMessageWritedate()));
		return mto;
	}
	//전체조회(admin)
	public ArrayList<MessageTO> selectAllMessage()throws SQLException{
		ArrayList<MessageTO> list = messageDAO.selectAllMessage();
		for(int i=0;i<list.size();i++){
			String dateTime = list.get(i).getMessageWritedate();
			String date = Utilities.changeDayTimeFormat(dateTime);
			list.get(i).setMessageWritedate(date);
		}
		return list;
	}
	
	//답장보낸것 조회(admin)
	public messageListTO getReplyList(int page)throws Exception{
		messageListTO lto = new messageListTO();
		int contentPerPage = Utilities.CONTENT_PER_PAGE;
		ArrayList<MessageTO> list = messageDAO.selectReplyBoardListByPage(page,contentPerPage);
		if(list.size()==0){
			if((page-1)==0){
				list = null;
			}//페이지에 아무것도 없을때 null값을 주어 받은것이 없다고 표시하기위해 사용
		}else{
			for(int i=0;i<list.size();i++){
				String da = list.get(i).getMessageWritedate();
				String writeDate = Utilities.changeDayFormat(da);
				list.get(i).setMessageWritedate(writeDate);
			}//작성일에 년,월,일로 나오게 하기위해 씀	
		}
		int totalContent = messageDAO.selectReplyTotalContentCount();
		PagingTO pto = new PagingTO(totalContent, page);
		lto.setList(list);
		lto.setPto(pto);
		return lto;
	}
	//paging처리 client 보낸쪽지함
	public messageListTO getClientReplyList(int page,String messageWriter)throws Exception{
		messageListTO lto = new messageListTO();
		int contentPerPage = Utilities.CONTENT_PER_PAGE;
		ArrayList<MessageTO> list = messageDAO.selectClientBoardListByPage(page,contentPerPage,messageWriter);
		if(list.size()==0){
			if((page-1)==0){
				list = null;
			}//페이지에 아무것도 없을때 null값을 주어 받은것이 없다고 표시하기위해 사용
		}else{
			for(int i=0;i<list.size();i++){
				String da = list.get(i).getMessageWritedate();
				String writeDate = Utilities.changeDayFormat(da);
				list.get(i).setMessageWritedate(writeDate);
			}//작성일에 년,월,일로 나오게 하기위해 씀
		}
		int totalContent = messageDAO.selectClientTotalContentCount(messageWriter);
		PagingTO pto = new PagingTO(totalContent, page);
		lto.setList(list);
		lto.setPto(pto);
		return lto;
	}
	
	//PagingTO 처리 (client 받은쪽지함)
	public messageListTO getClientList(int page,String messageReceiver)throws Exception{
		messageListTO lto = new messageListTO();
		int contentPerPage = Utilities.CONTENT_PER_PAGE;
		ArrayList<MessageTO> list = messageDAO.selectReplyClientBoardByPage(page,contentPerPage,messageReceiver);
		if(list.size()==0){
			if((page-1)==0){
				list = null;
			}//페이지에 아무것도 없을때 null값을 주어 받은것이 없다고 표시하기위해 사용
		}else{
			for(int i=0;i<list.size();i++){
				String da = list.get(i).getMessageWritedate();
				String writeDate = Utilities.changeDayFormat(da);
				list.get(i).setMessageWritedate(writeDate);
			}//작성일에 년,월,일로 나오게 하기위해 씀
		}
		int totalContent = messageDAO.selectReplyClientTotalContentCount(messageReceiver);
		PagingTO pto = new PagingTO(totalContent, page);
		lto.setList(list);
		lto.setPto(pto);
		return lto;
	}
	//PagingTO처리를 위해서 (admin)
	public messageListTO getList(int page)throws Exception{//ArrayList와 PagingTO를 messageListTO로 묶어줌(paging을 위해 필요)
		messageListTO lto = new messageListTO();
		int contentPerPage = Utilities.CONTENT_PER_PAGE;
		ArrayList<MessageTO> list = messageDAO.selectBoardListByPage(page,contentPerPage);
		if(list.size()==0){
			if((page-1)==0){
				list = null;
			}//페이지에 아무것도 없을때 null값을 주어 받은것이 없다고 표시하기위해 사용
		}else{
			for(int i=0;i<list.size();i++){
				String da = list.get(i).getMessageWritedate();
				String writeDate = Utilities.changeDayFormat(da);
				list.get(i).setMessageWritedate(writeDate);
			}//작성일에 년,월,일로 나오게 하기위해 씀
		}
		int totalContent = messageDAO.selectTotalContentCount();
		PagingTO pto = new PagingTO(totalContent, page);
		lto.setList(list);
		lto.setPto(pto);
		return lto;
	}
	
	//no값으로 message 조회
	public MessageTO selectByNoMessage(int messageNo) throws SQLException{
		MessageTO mto = messageDAO.selectByNoMessage(messageNo);
		mto.setMessageWritedate(Utilities.changeDayTimeFormat(mto.getMessageWritedate()));
		return mto;
	}
	
	//삭제(admin)
	public void deleteByNo(int messageNo) throws SQLException{
		messageDAO.deleteByNo(messageNo);
	}
	
	//삭제할때 업데이트 send=1 (admin)
	public void updateSend(int messageNo)throws SQLException{
		messageDAO.updateSend(messageNo);
	}
	
	//삭제할때 업데이트 receive=1 (client)
	public void updateReceive(int messageNo)throws SQLException{
		messageDAO.updateReceive(messageNo);
	}
	
	//전체 글중 아이디로 조회
	public messageListTO getSearchByIdList(int page, String searchId, String id)throws Exception{
		messageListTO lto = new messageListTO();
		int contentPerPage = Utilities.CONTENT_PER_PAGE;
		ArrayList<MessageTO> list = null;
		if(id.equals("message")){
			list = messageDAO.searchById(contentPerPage,page,searchId);
		}else if(id.equals("replyMessage")){
			list = messageDAO.replySearchById(contentPerPage,page,searchId);
		}
		for(int i=0;i<list.size();i++){
			String da = list.get(i).getMessageWritedate();
			String writeDate = Utilities.changeDayFormat(da);
			list.get(i).setMessageWritedate(writeDate);
		}//작성일에 년,월,일로 나오게 하기위해 씀
		int totalContent = messageDAO.selectSearchTotalContentCount(searchId);
		PagingTO pto = new PagingTO(totalContent, page);
		lto.setList(list);
		lto.setPto(pto);
		return lto;
	}
	
	//MemberId조회
	public ArrayList<MemberTO> selectMemberId()throws SQLException{
		return messageDAO.selectMemberId();
	}
	
	//admin id조회
	public String selectAdmin()throws SQLException{
		return messageDAO.selectAdmin();
	}
}
